int AnalyzeAccu (ImSize, AccuRows, AccuCols, Thres, Accu, Lines)
int     ImSize, AccuRows, AccuCols, Thres;
BYTE    ** Accu;
LinTypH *Lines;
{
   #define  XCONV(y)   (int) ((Rad - y*sin(Dtheta)) / cos(Dtheta))
   #define  YCONV(x)   (int) ((Rad - x*cos(Dtheta)) / sin(Dtheta))

   int    r,c, v,u, i, NofLines, Theta, Rad, Cy[2], Cx[2];
   double Dtheta;

   NofLines = 0;
   Cy[0]=0;  Cx[0]=0;  Cy[1]=0;  Cx[1]=0;

   for (r=0; r<AccuRows; r++) {
      for (c=0; c<AccuCols; c++) {
         if ((int)Accu[r][c] > Thres) {
            Rad = r - (AccuRows>>1);
            Theta = c;
            Dtheta = (Theta*PI)/128;
            if (Theta==0) {
               Cy[0]=0;  Cx[0]=Rad;  Cy[1]=ImSize-1;  Cx[1]=Rad;
            }else{
               if (Theta==64) {
                  Cy[0]=Rad;  Cx[0]=0;  Cy[1]=Rad;  Cx[1]=ImSize-1;
               }else{
                  i = 0;
                  v = 0;
                  u = XCONV(v);
                  if (0<=u && u<ImSize)  {Cy[i] = 0;  Cx[i] = u;  i++;}
                  v = ImSize-1;
                  u = XCONV(v);
                  if (0<=u && u<ImSize)  {Cy[i] = ImSize-1;  Cx[i] = u;  i++;}
                  if (i<2) {
                     u = 0;
                     v = YCONV(u);
                     if (0<=v && v<ImSize)  {Cy[i] = v;  Cx[i] = 0;  i++;}
                     if (i<2) {
                        u = ImSize-1;
                        v = YCONV(u);
                        if (0<=v && v<ImSize)  {Cy[i] = v;  Cx[i] = ImSize-1; i++;}
            }  }  }  }
            GetMem (Lines);
            Lines[NofLines].r0 = Cy[0];
            Lines[NofLines].c0 = Cx[0];
            Lines[NofLines].r1 = Cy[1];
            Lines[NofLines].c1 = Cx[1];
            Lines[NofLines].Inc = Accu[r][c];
            Lines[NofLines].Dir = (BYTE) Theta;
            NofLines++;
   }  }  }
   return (NofLines);
}
